﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.OleDb;
using System.IO;
using System.Collections;
using DTO;
namespace DAO
{
    public class CLOAIPHONGDAO:AbstractDao
    {
        // Hàm lấy danh sách tất cả các loại phòng(kể cả loại phòng chưa duyệt) dùng để xử lý
        public static List<CLOAIPHONGDTO> LayDanhSachLoaiPhong()
        {
            List<CLOAIPHONGDTO> ds = new List<CLOAIPHONGDTO>();
            OleDbConnection cn = new OleDbConnection();
            cn = CLOAIPHONGDAO.ConnectionData();
            String strSQL = "Select * From LOAIPHONG";
            OleDbCommand cmd = new OleDbCommand(strSQL, cn);
            OleDbDataReader myReader = cmd.ExecuteReader();
            while (myReader.Read())
            {           
                CLOAIPHONGDTO loaiphongDto = new CLOAIPHONGDTO();      
                loaiphongDto.MaLoaiPhong = int.Parse(myReader[0].ToString());
                loaiphongDto.TenLoaiPhong=myReader[1].ToString();
                loaiphongDto.DonGia=int.Parse(myReader[2].ToString());
                loaiphongDto.Duyet=bool.Parse(myReader[3].ToString());
                loaiphongDto.TinhTrang = bool.Parse(myReader[4].ToString());
                loaiphongDto.DonGiaMoi = int.Parse(myReader[5].ToString());
                ds.Add(loaiphongDto);
            }
            myReader.Close();
            cn.Close();
            return ds;
        }
        // Hàm lấy danh sách tất cả các loại phòng đã được duyệt và chưa bị đánh dấu xóa dùng để xử lý
        public static List<CLOAIPHONGDTO> LayDanhSachLoaiPhongDaDuyet()
        {
            List<CLOAIPHONGDTO> ds = new List<CLOAIPHONGDTO>();
            OleDbConnection cn = new OleDbConnection();
            cn = CLOAIPHONGDAO.ConnectionData();
            String strSQL = "Select * From LOAIPHONG where TinhTrang=false and Duyet=true";
            OleDbCommand cmd = new OleDbCommand(strSQL, cn);
            OleDbDataReader myReader = cmd.ExecuteReader();
            while (myReader.Read())
            {
                CLOAIPHONGDTO loaiphongDto = new CLOAIPHONGDTO();
                loaiphongDto.MaLoaiPhong = int.Parse(myReader[0].ToString());
                loaiphongDto.TenLoaiPhong = myReader[1].ToString();
                loaiphongDto.DonGia = int.Parse(myReader[2].ToString());
                loaiphongDto.Duyet = bool.Parse(myReader[3].ToString());
                loaiphongDto.TinhTrang = bool.Parse(myReader[4].ToString());
                loaiphongDto.DonGiaMoi = int.Parse(myReader[5].ToString());
                ds.Add(loaiphongDto);
            }
            myReader.Close();
            cn.Close();
            return ds;
        }

        // Hàm lấy danh sách tất cả các loại phòng chưa duyệt dùng để xử lý
        public static List<CLOAIPHONGDTO> LayDanhSachLoaiPhongChuaDuyet()
        {
            List<CLOAIPHONGDTO> ds = new List<CLOAIPHONGDTO>();
            OleDbConnection cn = new OleDbConnection();
            cn = CLOAIPHONGDAO.ConnectionData();
            String strSQL = "Select * From LOAIPHONG where Duyet=false";
            OleDbCommand cmd = new OleDbCommand(strSQL, cn);
            OleDbDataReader myReader = cmd.ExecuteReader();
            while (myReader.Read())
            {
                CLOAIPHONGDTO loaiphongDto = new CLOAIPHONGDTO();
                loaiphongDto.MaLoaiPhong = int.Parse(myReader[0].ToString());
                loaiphongDto.TenLoaiPhong = myReader[1].ToString();
                loaiphongDto.DonGia = int.Parse(myReader[2].ToString());
                loaiphongDto.Duyet = bool.Parse(myReader[3].ToString());
                loaiphongDto.TinhTrang = bool.Parse(myReader[4].ToString());
                loaiphongDto.DonGiaMoi = int.Parse(myReader[5].ToString());
                ds.Add(loaiphongDto);
            }
            myReader.Close();
            cn.Close();
            return ds;
        }
        // Hàm lấy danh sách tất cả các loại phòng đã đánh dấu xóa dùng để xử lý
        public static List<CLOAIPHONGDTO> LayDanhSachLoaiPhongDaDanhDauXoa()
        {
            List<CLOAIPHONGDTO> ds = new List<CLOAIPHONGDTO>();
            OleDbConnection cn = new OleDbConnection();
            cn = CLOAIPHONGDAO.ConnectionData();
            String strSQL = "Select * From LOAIPHONG where TinhTrang=true";
            OleDbCommand cmd = new OleDbCommand(strSQL, cn);
            OleDbDataReader myReader = cmd.ExecuteReader();
            while (myReader.Read())
            {
                CLOAIPHONGDTO loaiphongDto = new CLOAIPHONGDTO();
                loaiphongDto.MaLoaiPhong = int.Parse(myReader[0].ToString());
                loaiphongDto.TenLoaiPhong = myReader[1].ToString();
                loaiphongDto.DonGia = int.Parse(myReader[2].ToString());
                loaiphongDto.Duyet = bool.Parse(myReader[3].ToString());
                loaiphongDto.TinhTrang = bool.Parse(myReader[4].ToString());
                loaiphongDto.DonGiaMoi = int.Parse(myReader[5].ToString());
                ds.Add(loaiphongDto);
            }
            myReader.Close();
            cn.Close();
            return ds;
        }
        //Lây danh sách loại phòng chưa bị đánh dấu xóa
        public static List<CLOAIPHONGDTO> LayDanhSachLoaiPhongChuaDanhDauXoa()
        {
            List<CLOAIPHONGDTO> ds = new List<CLOAIPHONGDTO>();
            OleDbConnection cn = new OleDbConnection();
            cn = CLOAIPHONGDAO.ConnectionData();
            String strSQL = "Select * From LOAIPHONG where TinhTrang=false";
            OleDbCommand cmd = new OleDbCommand(strSQL, cn);
            OleDbDataReader myReader = cmd.ExecuteReader();
            while (myReader.Read())
            {
                CLOAIPHONGDTO loaiphongDto = new CLOAIPHONGDTO();
                loaiphongDto.MaLoaiPhong = int.Parse(myReader[0].ToString());
                loaiphongDto.TenLoaiPhong = myReader[1].ToString();
                loaiphongDto.DonGia = int.Parse(myReader[2].ToString());
                loaiphongDto.Duyet = bool.Parse(myReader[3].ToString());
                loaiphongDto.TinhTrang = bool.Parse(myReader[4].ToString());
                loaiphongDto.DonGiaMoi = int.Parse(myReader[5].ToString());
                ds.Add(loaiphongDto);
            }
            myReader.Close();
            cn.Close();
            return ds;
        }

        //Hàm lấy toàn bộ loại phòng trong csdl đổ vào 1 bảng chỉ hiện ra trên giao diện nhưng không dùg xử lý được*/
        public static DataTable LayBang()
        {
            DataTable dt = new DataTable();
            OleDbConnection cn;
            //B1 & B2: Tao chuoi ket noi, mo ket noi bang doi tuong ket noi
            cn = CLOAIPHONGDAO.ConnectionData();
            //'B3: Tao chuoi strSQL thao tac CSDL
            String strSQL;
            strSQL = "Select * From LOAIPHONG";
            //B4: Thuc thi chuoi strSQL
            OleDbDataAdapter da = new OleDbDataAdapter(strSQL, cn);
            da.Fill(dt);
            //B5: Dong ket noi CSDL
            cn.Close();
            return dt;
        }

        // lấy 1 số thông tin của tất cả loại phòng
        //đổ vào vào 1 bảng chỉ hiện ra trên giao diện, không dùng để xử lý
        public static DataTable LayBangLoaiPhong()
        {
            DataTable dt = new DataTable();
            OleDbConnection cn;
            //B1 & B2: Tao chuoi ket noi, mo ket noi bang doi tuong ket noi
            cn = CLOAIPHONGDAO.ConnectionData();
            //B3: Tao chuoi strSQL thao tac CSDL
            String strSQL;
            strSQL = "Select TenLoaiPhong,DonGia,Duyet,TinhTrang From LOAIPHONG";
            //B4: Thuc thi chuoi strSQL
            OleDbDataAdapter da = new OleDbDataAdapter(strSQL, cn);
            da.Fill(dt);
            //B5: Dong ket noi CSDL
            cn.Close();
            return dt;
        }
        //Lấy ra 1 số thông tin của các phòng đã được giám đốc duyệt và chưa bị đánh dấu xóa
        //đổ vào vào 1 bảng chỉ hiện ra trên giao diện, không dùng để xử lý
        public static DataTable LayBangLoaiPhongDaDuyet()
        {
            DataTable dt = new DataTable();
            OleDbConnection cn;
            //B1 & B2: Tao chuoi ket noi, mo ket noi bang doi tuong ket noi
            cn = CLOAIPHONGDAO.ConnectionData();
            //B3: Tao chuoi strSQL thao tac CSDL
            String strSQL;
            strSQL = "Select * From LOAIPHONG where TinhTrang=false and Duyet=true";
            //B4: Thuc thi chuoi strSQL
            OleDbDataAdapter da = new OleDbDataAdapter(strSQL, cn);
            da.Fill(dt);
            //B5: Dong ket noi CSDL
            cn.Close();
            return dt;
        }

        //Hàm kết hai bảng phòng và loại phòng đổ vào vào 1 bảng chỉ hiện ra trên giao diện, không dùng để xử lý
        //Lấy ra 1 số thông tin của các loại phòng chưa được giám đốc duyệt 
        public static DataTable LayBangLoaiPhongChuaDuyet()
        {
            DataTable dt = new DataTable();
            OleDbConnection cn;
            //B1 & B2: Tao chuoi ket noi, mo ket noi bang doi tuong ket noi
            cn = CLOAIPHONGDAO.ConnectionData();
            //B3: Tao chuoi strSQL thao tac CSDL
            String strSQL;
            strSQL = "Select * From LOAIPHONG where Duyet=false";
            //B4: Thuc thi chuoi strSQL
            OleDbDataAdapter da = new OleDbDataAdapter(strSQL, cn);
            da.Fill(dt);
            //B5: Dong ket noi CSDL
            cn.Close();
            return dt;
        }
        //Lấy ra 1 số thông tin các loại phòng đã đánh dấu xóa 
        public static DataTable LayBangLoaiPhongDaDanhDauXoa()
        {
            DataTable dt = new DataTable();
            OleDbConnection cn;
            //B1 & B2: Tao chuoi ket noi, mo ket noi bang doi tuong ket noi
            cn = CLOAIPHONGDAO.ConnectionData();
            //B3: Tao chuoi strSQL thao tac CSDL
            String strSQL;
            strSQL = "Select * From LOAIPHONG where TinhTrang=true";
            //B4: Thuc thi chuoi strSQL
            OleDbDataAdapter da = new OleDbDataAdapter(strSQL, cn);
            da.Fill(dt);
            //B5: Dong ket noi CSDL
            cn.Close();
            return dt;
        }

        //Lấy ra 1 số thông tin các loại phòng chưa đánh dấu xóa 
        public static DataTable LayBangLoaiPhongChuaDanhDauXoa()
        {
            DataTable dt = new DataTable();
            OleDbConnection cn;
            //B1 & B2: Tao chuoi ket noi, mo ket noi bang doi tuong ket noi
            cn = CLOAIPHONGDAO.ConnectionData();
            //B3: Tao chuoi strSQL thao tac CSDL
            String strSQL;
            strSQL = "Select * From LOAIPHONG where TinhTrang=false";
            //B4: Thuc thi chuoi strSQL
            OleDbDataAdapter da = new OleDbDataAdapter(strSQL, cn);
            da.Fill(dt);
            //B5: Dong ket noi CSDL
            cn.Close();
            return dt;
        }
        //Thêm 1 loại phòng
        public void ThemLoaiPhong(CLOAIPHONGDTO loaiphongDto)
        {
            OleDbConnection cn;
            //B1 & B2: Tao chuoi ket noi, mo ket noi bang doi tuong ket noi
            cn = CLOAIPHONGDAO.ConnectionData();
            String strSQL = "Insert into LOAIPHONG(TenLoaiPhong,DonGia,Duyet,TinhTrang,DonGiaMoi) values (?,?,?,?,?)";
            OleDbCommand cmd = new OleDbCommand(strSQL, cn);
            cmd.Parameters.Add("@TenLoaiPhong", OleDbType.WChar);
            cmd.Parameters.Add("@DonGia", OleDbType.Integer);
            cmd.Parameters.Add("@Duyet", OleDbType.Boolean);
            cmd.Parameters.Add("@TinhTrang", OleDbType.Boolean);
            cmd.Parameters.Add("@DonGiaMoi", OleDbType.Integer);
            cmd.Parameters[0].Value = loaiphongDto.TenLoaiPhong;
            cmd.Parameters[1].Value = loaiphongDto.DonGia;
            cmd.Parameters[2].Value = loaiphongDto.Duyet;
            cmd.Parameters[3].Value = loaiphongDto.TinhTrang;
            cmd.Parameters[4].Value = loaiphongDto.DonGiaMoi;
            cmd.ExecuteNonQuery();
            
            cn.Close();
        }
        //Hàm đánh dấu xóa loại phòng tạm thời hoặc phục hồi lại
        public static void CapNhatTinhTrangLoaiPhong(int MaLoaiPhong, bool TinhTrang)
        {
            OleDbConnection cn;
            cn = CLOAIPHONGDAO.ConnectionData();
            string strSQL = "UPDATE LOAIPHONG SET TinhTrang=? WHERE (MaLoaiPhong=?)";
            OleDbCommand cmd = new OleDbCommand(strSQL, cn);
            cmd.Parameters.Add("@TinhTrang", OleDbType.Boolean);
            cmd.Parameters.Add("@MaLoaiPhong", OleDbType.Integer);
            cmd.Parameters[0].Value = TinhTrang;
            cmd.Parameters[1].Value = MaLoaiPhong;
            cmd.ExecuteNonQuery();
            cn.Close();
        }
        //Hàm xóa vĩnh viễn loại phòng
        public static void XoaLoaiPhong(int MaLoaiPhong)
        {
            //Tao chuoi ket noi, mo ket noi bang doi tuong ket noi
            OleDbConnection cn;
            cn = CLOAIPHONGDAO.ConnectionData();
            // chuoi strSQL thao tac CSDL
            String strSQL = "DELETE FROM LOAIPHONG WHERE MaLoaiPhong=?";
            //B4: Thuc thi chuoi strSQL
            OleDbCommand cmd = new OleDbCommand(strSQL, cn);
            //add vao cmd để tránh bị sai sót khi gán thuộc tính bằng 1 giá trị cụ thể
            cmd.Parameters.Add("@MaLoaiPhong", OleDbType.Integer);
            cmd.Parameters[0].Value = MaLoaiPhong;
            cmd.ExecuteNonQuery();
            //đóng kết nối
            cn.Close();
        }
        //Hàm cập nhật 1 số thông tin 1 loại phòng
        public void CapNhatThongTinLoaiPhong(CLOAIPHONGDTO loaiphongDto)
        {
            OleDbConnection cn;
            cn = CLOAIPHONGDAO.ConnectionData();
            String strSQL = "UPDATE LOAIPHONG SET TenLoaiPhong=? WHERE  (MaLoaiPhong= ?)";
            OleDbCommand cmd = new OleDbCommand(strSQL, cn);
            cmd.Parameters.Add("@TenLoaiPhong", OleDbType.WChar);
            cmd.Parameters.Add("@MaLoaiPhong", OleDbType.Integer);
            cmd.Parameters[0].Value = loaiphongDto.TenLoaiPhong;     
            cmd.Parameters[1].Value = loaiphongDto.MaLoaiPhong;
            cmd.ExecuteNonQuery();
            cn.Close();
        }
        //Hàm thay đổi đơn giá 1 loại phòng
        public static void ThayDoiDonGiaLoaiPhong(int MaLoaiPhong,int DonGia)
        {
            OleDbConnection cn;
            cn = CLOAIPHONGDAO.ConnectionData();
            String strSQL = "UPDATE LOAIPHONG SET DonGia=? WHERE  (MaLoaiPhong= ?)";
            OleDbCommand cmd = new OleDbCommand(strSQL, cn);
            cmd.Parameters.Add("@DonGia", OleDbType.Integer);
            cmd.Parameters.Add("@MaLoaiPhong", OleDbType.Integer);
            cmd.Parameters[0].Value = DonGia;
            cmd.Parameters[1].Value = MaLoaiPhong;
            cmd.ExecuteNonQuery();
            cn.Close();
        }
        //Hàm cập nhật đầy đủ thông tin loại phòng*/
        //public void CapNhatThongTinLoaiPhong(CLOAIPHONGDTO loaiphongDto)
        //{
        //    OleDbConnection cn;
        //    cn = CLOAIPHONGDAO.ConnectionData();
        //    String strSQL = "UPDATE LOAIPHONG SET TenLoaiPhong=?,DonGia=?,Duyet=?,TinhTrang=? WHERE  (MaLoaiPhong= ?)";
        //    OleDbCommand cmd = new OleDbCommand(strSQL, cn);
        //    cmd.Parameters.Add("@TenLoaiPhong", OleDbType.WChar);
        //    cmd.Parameters.Add("@DonGia", OleDbType.Integer);
        //    cmd.Parameters.Add("@Duyet", OleDbType.Boolean);
        //    cmd.Parameters.Add("@TinhTrang", OleDbType.Boolean);
        //    cmd.Parameters.Add("@MaLoaiPhong", OleDbType.Integer);
        //    cmd.Parameters[0].Value = loaiphongDto.TenLoaiPhong;
        //    cmd.Parameters[1].Value = loaiphongDto.DonGia;
        //    cmd.Parameters[2].Value = loaiphongDto.Duyet;
        //    cmd.Parameters[3].Value = loaiphongDto.TinhTrang;
        //    cmd.Parameters[4].Value = loaiphongDto.MaLoaiPhong;
        //    cmd.ExecuteNonQuery();
        //    cn.Close();
        //}
      
        //Hàm xét duyệt loại phòng
        public static void DuyetLoaiPhong(int MaLoaiPhong, bool Duyet)
        {
            OleDbConnection cn;
            cn = CLOAIPHONGDAO.ConnectionData();
            string strSQL = "UPDATE LOAIPHONG SET Duyet=? WHERE (MaLoaiPhong=?)";
            OleDbCommand cmd = new OleDbCommand(strSQL, cn);
            cmd.Parameters.Add("@Duyet", OleDbType.Boolean);
            cmd.Parameters.Add("@MaLoaiPhong", OleDbType.Integer);
            cmd.Parameters[0].Value = Duyet;
            cmd.Parameters[1].Value = MaLoaiPhong;
            cmd.ExecuteNonQuery();
            cn.Close();
        }
        //tiep tan 
        public static CLOAIPHONGDTO LayLoaiPhongDaDuyet(int maLoaiPhong)
        {
            OleDbConnection cn = new OleDbConnection();
            cn = CLOAIPHONGDAO.ConnectionData();
            String strSQL = "Select * From LOAIPHONG where TinhTrang=false and Duyet=true and MaLoaiPhong = " + maLoaiPhong;
            OleDbCommand cmd = new OleDbCommand(strSQL, cn);
            OleDbDataReader myReader = cmd.ExecuteReader();
            CLOAIPHONGDTO loaiphongDto = new CLOAIPHONGDTO();
            while (myReader.Read())
            {
                loaiphongDto.MaLoaiPhong = int.Parse(myReader[0].ToString());
                loaiphongDto.TenLoaiPhong = myReader[1].ToString();
                loaiphongDto.DonGia = int.Parse(myReader[2].ToString());
                loaiphongDto.Duyet = bool.Parse(myReader[3].ToString());
                loaiphongDto.TinhTrang = bool.Parse(myReader[4].ToString());
                loaiphongDto.DonGiaMoi = int.Parse(myReader[5].ToString());

            }
            myReader.Close();
            cn.Close();
            return loaiphongDto;
        }
        //Nguyên
        //hàm thay đổi đơn giá mới của một loại phòng
        public static void ThayDoiDonGiaLoaiPhong1(int MaLoaiPhong, int DonGiaMoi)
        {
            OleDbConnection cn;
            cn = CLOAIPHONGDAO.ConnectionData();
            String strSQL = "UPDATE LOAIPHONG SET DonGiaMoi=? WHERE  (MaLoaiPhong= ?)";
            OleDbCommand cmd = new OleDbCommand(strSQL, cn);
            cmd.Parameters.Add("@DonGiaMoi", OleDbType.Integer);
            cmd.Parameters.Add("@MaLoaiPhong", OleDbType.Integer);
            cmd.Parameters[0].Value = DonGiaMoi;
            cmd.Parameters[1].Value = MaLoaiPhong;
            cmd.ExecuteNonQuery();
            cn.Close();
        }
        //Thêm 1 loại phòng đầy đủ
        public void ThemLoaiPhong1(CLOAIPHONGDTO loaiphongDto)
        {
            OleDbConnection cn;
            //B1 & B2: Tao chuoi ket noi, mo ket noi bang doi tuong ket noi
            cn = CLOAIPHONGDAO.ConnectionData();
            String strSQL = "Insert into LOAIPHONG(TenLoaiPhong,DonGia,Duyet,TinhTrang,DonGiaMoi) values (?,?,?,?,?)";
            OleDbCommand cmd = new OleDbCommand(strSQL, cn);
            cmd.Parameters.Add("@TenLoaiPhong", OleDbType.WChar);
            cmd.Parameters.Add("@DonGia", OleDbType.Integer);
            cmd.Parameters.Add("@Duyet", OleDbType.Boolean);
            cmd.Parameters.Add("@TinhTrang", OleDbType.Boolean);
            cmd.Parameters.Add("@DonGiaMoi", OleDbType.Integer);
            cmd.Parameters[0].Value = loaiphongDto.TenLoaiPhong;
            cmd.Parameters[1].Value = loaiphongDto.DonGia;
            cmd.Parameters[2].Value = loaiphongDto.Duyet;
            cmd.Parameters[3].Value = loaiphongDto.TinhTrang;
            cmd.Parameters[4].Value = loaiphongDto.DonGiaMoi;
            cmd.ExecuteNonQuery();
            //strSQL = "Select @@IDENTITY";
            ////cmd = new OleDbCommand(strSQL, cn);
            ////lndDto.MaLoaiNguoiDung = (int)cmd.ExecuteScalar();
            cn.Close();
        }
        //Ấn
        public static CLOAIPHONGDTO LayThongTinLoaiPhong(int MaLoaiPhong)
        {
            CLOAIPHONGDTO loaiphongDto = new CLOAIPHONGDTO();
            OleDbConnection cn = new OleDbConnection();
            cn = CPHONGDAO.ConnectionData();
            String strSQL = "Select * From LOAIPHONG where MaLoaiPhong=" + MaLoaiPhong.ToString();
            OleDbCommand cmd = new OleDbCommand(strSQL, cn);
            OleDbDataReader myReader = cmd.ExecuteReader();
            while (myReader.Read())
            {
                loaiphongDto.MaLoaiPhong = int.Parse(myReader[0].ToString());
                loaiphongDto.TenLoaiPhong = myReader[1].ToString();
                loaiphongDto.DonGia = int.Parse(myReader[2].ToString());
                loaiphongDto.Duyet = bool.Parse(myReader[3].ToString());
                loaiphongDto.TinhTrang = bool.Parse(myReader[4].ToString());
                loaiphongDto.DonGiaMoi = int.Parse(myReader[5].ToString());
            }
            myReader.Close();
            cn.Close();
            return loaiphongDto;
        }
    }
}
